home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / emacs.lha / emacs-19.16 / info / forms (.txt) < prev    next >
GNU Info File  |  1993-06-17  |  30KB  |  665 lines

  1. This is Info file ../info/forms, produced by Makeinfo-1.55 from the
  2. input file forms.texinfo.
  3.    This file documents forms-mode, a forms based major mode for GNU
  4. Emacs.
  5.    Permission is granted to make and distribute verbatim copies of this
  6. manual provided the copyright notice and this permission notice are
  7. preserved on all copies.
  8. File: forms,  Node: Top,  Next: What is in a Forms,  Up: (DIR)
  9.    Forms mode is an Emacs major mode for working with simple plain-text
  10. databases in a forms-oriented manner. In forms mode, the information in
  11. these files is presented in an Emacs window in a user-defined format,
  12. one record at a time. Forms can be inspected read-only (viewing) or
  13. modified and updated.
  14.    Forms mode is not a simple major mode, but requires two files to do
  15. its job: a control file and a data file. The data file holds the actual
  16. data which will be presented. The control file describes how it will be
  17. presented.
  18. * Menu:
  19. * What is in a Forms::    Introduction.
  20. * Data File Format::    How to format the data file.
  21. * Control File Format::    How to control forms mode.
  22. * Forms Format Description::
  23.             How to define the forms layout.
  24. * Modifying Forms Contents::
  25.             How to modify.
  26. * Forms Mode Commands::    The commands available, and how to use them.
  27. * Key Bindings::    Which keys are bound to what commands.
  28. * Miscellaneous::    Forms mode messages and other remarks.
  29. * Error Messages::    List of error messages forms mode can produce.
  30. * Examples::        Some examples.
  31. * Credits::        Thanks everyone.
  32. * Concept Index::    Index of Concepts
  33. * Variable Index::    Index of Variables.
  34. * Function Index::    Index of Functions.
  35. File: forms,  Node: What is in a Forms,  Next: Data File Format,  Prev: Top,  Up: Top
  36. What is in a forms
  37. ==================
  38.    Let's illustrate forms mode with an example. Suppose you are looking
  39. at your `/etc/passwd' file, and your screen looks as follows:
  40.      ====== /etc/passwd ======
  41.      
  42.      User : root   Uid: 0   Gid: 1
  43.      
  44.      Name : Super User
  45.      
  46.      Home : /
  47.      
  48.      Shell: /bin/sh
  49.    As you can see, the familiar fields from the entry for the super user
  50. are all there, but instead of being colon-separated on one single line,
  51. they make up a forms.
  52.    The contents of the forms consists of the contents of the fields of
  53. the record (e.g. "root", "0", "1", "Super User") interspersed with
  54. normal text (e.g "User : ", "Uid: ").
  55.    You can define yourself how text and fields will be used to make up
  56. the forms.
  57.    When you modifiy the contents of the forms, it will be analyzed and
  58. the new contents of the fields of this record will be extracted. It
  59. possible, the file will be updated with the new contents.
  60. File: forms,  Node: Data File Format,  Next: Control File Format,  Prev: What is in a Forms,  Up: Top
  61. Data file format
  62. ================
  63.    Files for use with forms mode are very simple - each record (line)
  64. forms the contents one form.  Each record is supposed to consist of a
  65. number of fields. These fields are separated by the value of the string
  66. `forms-field-sep', which is a `TAB' by default.
  67.    Fields may contain text which shows up in the forms in multiple
  68. lines.  These lines are separated in the field using a PSEUDO-NEWLINE
  69. character which is defined by the value of the string
  70. `forms-multi-line'. Its default value is a Control-K character. If it
  71. is set to `nil' multiple line fields are prohibited.
  72. File: forms,  Node: Control File Format,  Next: Forms Format Description,  Prev: Data File Format,  Up: Top
  73. Control file format
  74. ===================
  75.    The control file serves two purposes.
  76.    First, it defines the data file to use, and its properties.
  77.    Second, the Emacs buffer it occupies will be used by the forms mode
  78. to display the forms.
  79.    The contents of the control file are evaluated using the Emacs
  80. command `eval-current-buffer', hence must contain valid Emacs-lisp
  81. expressions.  These expressions must set the following lisp variables
  82. to a suitable value:
  83. `forms-file'
  84.      This variable must be set to the name of the data file.
  85.      Example:
  86.           (setq forms-file "my/data-file")
  87. `forms-format-list'
  88.      This variable describes the way the fields of the record are
  89.      formatted on the screen. See the next section for details.
  90. `forms-number-of-fields'
  91.      This variable holds the number of fields in each record of the data
  92.      file.
  93.      Example:
  94.           (setq forms-number-of-fields 10)
  95.    An error will be given if one of the above values has not been set.
  96.    Other variables that may be set from the control file are optional.
  97. Most of them have suitable default values.
  98. `forms-field-sep'
  99.      This variable may be used to designate the string which separates
  100.      the fields in the records of the data file. If not set, it
  101.      defaults to a string containing a single `TAB' character.
  102.      Example:
  103.           (setq forms-field-sep "\t")
  104. `forms-read-only'
  105.      If set to a value other than `nil', the data file is treated
  106.      read-only. If the data file can not be written into, read-only
  107.      mode is enforced. The default value for `forms-read-only' is
  108.      derived from the access permissions of the data file.
  109.      Example:
  110.           (set forms-read-only t)
  111. `forms-multi-line'
  112.      This variable may be set to allow multi-line text in fields. It
  113.      should be set to a string of one character, which denotes the
  114.      pseudo new-line character to be used to separate the text lines.
  115.      Its default value is Control-K (octal 013). If set to `nil',
  116.      multi-line text fields are prohibited.
  117.      It may not be a character contained in `forms-field-sep'.
  118.      Example:
  119.           (setq forms-multi-line "\C-k")
  120. `forms-forms-scroll'
  121.      *Note Forms Mode Commands:: for the description.
  122. `forms-forms-jump'
  123.      *Note Forms Mode Commands:: for the description.
  124. `forms-new-record-filter'
  125.      The control file may define a function `forms-new-record-filter',
  126.      or set `forms-new-record-filter' to such a function. If so, this
  127.      function is called when a new record is created to supply default
  128.      values for fields.
  129. `forms-modified-record-filter'
  130.      The control file may define a function
  131.      `forms-modified-record-filter', or set
  132.      `forms-modified-record-filter' to such a function.  If so, this
  133.      function is called when a record is modified, just before writing
  134.      the modified record back to the data file.
  135. File: forms,  Node: Forms Format Description,  Next: Modifying Forms Contents,  Prev: Control File Format,  Up: Top
  136. The forms format description
  137. ============================
  138.    The value of the variable `forms-format-list' is used to specify the
  139. format of the forms. It must be a list of formatting elements, each of
  140. which can be a string, number, lisp list or a lisp symbol that
  141. evaluates to one of these. The formatting elements are processed in the
  142. order they appear in the list.
  143.    A `string' formatting element is inserted in the forms "as is".
  144.    A `number' element selects a field of the record. The contents of
  145. this field are inserted. The first field of the record has number 1
  146. (one).
  147.    A `lisp list' specifies a function call. This function is called
  148. every time a record is displayed, and its result, that must be a
  149. string, is inserted in the forms. The function should do nothing but
  150. returning a string. The fields of the record being displayed are
  151. available to this function as the list `forms-fields' and can be
  152. accessed using `(nth 'FIELD NUMBER` forms-fields)'.  Fields are
  153. numbered starting from 1 (one).
  154.    A `lisp symbol' must evaluate to one of the above possibilities.
  155.    If a record does not contain the number of fields as specified in
  156. `forms-number-of-fields', a warning message will be printed. Excess
  157. fields are ignored, missing fields are set to empty.
  158.    The control file which shows your `/etc/passwd' file as demonstrated
  159. in the beginning of this document might look as follows:
  160.      ;; This demo visits /etc/passwd.
  161.      
  162.      (setq forms-file "/etc/passwd")
  163.      (setq forms-number-of-fields 7)
  164.      (setq forms-read-only t)                 ; to make sure
  165.      (setq forms-field-sep ":")
  166.      (setq forms-multi-line nil)              ; not allowed
  167.      
  168.      (setq forms-format-list
  169.            (list
  170.             "====== /etc/passwd ======\n\n"
  171.             "User : "    1
  172.             "   Uid: "   3
  173.             "   Gid: "   4
  174.             "\n\n"
  175.             "Name : "    5
  176.             "\n\n"
  177.             "Home : "    6
  178.             "\n\n"
  179.             "Shell: "    7
  180.             "\n"))
  181.    When functions are to be used in `forms-format-list' they must be
  182. quoted to prevent them from being evaluated too early:
  183.      (setq forms-format-list
  184.            (list
  185.             "====== " forms-file " ======\n\n"
  186.             "User : "    1
  187.             '(make-string 20 ?-)
  188.             ...
  189.            ))
  190.    Alternatively, instead of quoting the functions, the whole list may
  191. be quoted:
  192.      (setq forms-format-list
  193.           '(
  194.             "====== " forms-file " ======\n\n"
  195.             "User : "    1
  196.             (make-string 20 ?-)
  197.             ...
  198.            ))
  199.    Upon startup, the contents of `forms-format-list' are validated. If
  200. errors are encountered, processing is aborted with an error message
  201. which includes a descriptive text. *Note Error Messages::, for a
  202. detailed list of error messages.
  203. File: forms,  Node: Modifying Forms Contents,  Next: Forms Mode Commands,  Prev: Forms Format Description,  Up: Top
  204. Modifying The Forms Contents
  205. ============================
  206.    If a forms is not read-only, it's contents can be modified.
  207.    All normal editor commands may be used to change the forms. There is
  208. no distinction between the "fixed" text and the text from the fields of
  209. the records. However, upon completion, the forms is parsed to extract
  210. the new contents of the fields. The "fixed" portions of the forms are
  211. used to delimit the fields, these portions should therefore not be
  212. modified to avoid the risk that the field contents cannot be determined.
  213. Moreover, ambiguous field contents, which can not be discriminated from
  214. "fixed" text, must be avoided.
  215.    If the contents of the forms cannot be recognized properly, this is
  216. signaled using a descriptive text. *Note Error Messages::, for more
  217. info.  The cursor will indicate the last part of the forms which was
  218. successfully parsed.
  219.    If `forms-modified-record-filter' has been set, this function is
  220. called before the new data is written to the data file. The function is
  221. called with one argument: a vector that contains the contents of the
  222. fields of the record. Fields can referenced or modified using the lisp
  223. functions `aref' and `aset'. The first field has number 1 (one). The
  224. function must return the (possibly modified) vector to the calling
  225. environment.
  226.      (defun my-modified-record-filter (record)
  227.        ;; modify second field
  228.        (aset record 2 (current-time-string))
  229.        record        ; return it
  230.      )
  231.      (setq forms-modified-record-filter 'my-modified-record-filter)
  232. File: forms,  Node: Forms Mode Commands,  Next: Key Bindings,  Prev: Modifying Forms Contents,  Up: Top
  233. Forms mode commands
  234. ===================
  235. `M-x forms-find-file FILE'
  236.    Visits FILE, runs `eval-current-buffer' on it, and puts the buffer
  237. into forms-mode. The first record of the data file will be loaded and
  238. shown.
  239.    The modeline will display the major mode `"Forms"' followed by the
  240. minor mode `"View"' if the file is visited read-only.  The number of
  241. the current record (N) and the total number of records (T) in the file
  242. is shown in the modeline as `"n/t"'.
  243. For example:
  244.      --%%-Emacs: passwd-demo          (Forms View 1/54)----All-------
  245. `M-x forms-find-file-other-window FILE'
  246.    This command is similar to `forms-find-file', but visits the file in
  247. another window.
  248.    If the buffer is not read-only, you may change the buffer to modify
  249. the fields in the record. When the current record is left, e.g. by
  250. switching to another record, the contents of the buffer are parsed
  251. using the specifications in `forms-format-list', and a new record is
  252. constructed which replaces the current record in the data file. Fields
  253. of the record which are not shown in the forms are not modified; they
  254. retain their original contents.
  255.    Most forms mode commands are bound to keys, and are accessible with
  256. the conventional `C-c' prefix. In read-only mode this prefix is not
  257. used.  *Note Key Bindings::, for the default key bindigs used by forms
  258. mode.
  259.    The following commands are available within forms mode.
  260. `forms-next-record'
  261.      shows the next record. With a prefix argument, show the n-th next
  262.      record.
  263. `forms-prev-record'
  264.      shows the previous record. With a prefix argument, show the n-th
  265.      previous record.
  266. `forms-jump-record'
  267.      jumps to a record by number. A prefix argument is used for the
  268.      record number to jump to. If no prefix argument is supplied, a
  269.      record number is asked for in the minibuffer.
  270.      If an invalid record number is supplied, an error message is
  271.      displayed reading the offending record number, and the allowable
  272.      range of numbers.
  273. `forms-first-record'
  274.      jumps to the first record.
  275. `forms-last-record'
  276.      jumps to the last record. Also re-counts the number of records in
  277.      the data file.
  278. `forms-next-field'
  279.      jumps to the next field in the forms. With a numeric argument:
  280.      jumps that many fields, or to the first field if there are not
  281.      that many fields left.
  282.      Jumping to fields is implemented using markers, which are placed
  283.      in front of the fields. If the contents of the forms are modified,
  284.      the markers are adjusted. However, if text around a marker has
  285.      been deleted from the screen and inserted again it is possible
  286.      that this marker no longer points at its field correctly.  *Note
  287.      Markers: (emacs)Markers, for more information on markers.
  288. `forms-view-mode'
  289.      switches to read-only mode. Forms mode commands may no longer be
  290.      prefixed with `C-c'.
  291. `forms-edit-mode'
  292.      switches to edit mode. Forms mode commands must be prefixed with
  293.      `C-c'.
  294.      Switching to edit mode is only possible if write access to the data
  295.      file is allowed.
  296. `forms-insert-record'
  297.      create a new record, which is inserted before the current record.
  298.      An empty form is presented, which can be filled in using familiar
  299.      editor commands. With a prefix argument: the new record is created
  300.      after the current one.
  301.      If a function `forms-new-record-filter' was defined in the control
  302.      file, this function is called to fill in default values for
  303.      fields. The function is passed a vector of empty strings, one for
  304.      each field. For convenience, an additional element is added so the
  305.      numbers of the elements are the same as the numbers used in the
  306.      forms description. The function must return the (updated) vector.
  307.      Instead of defining the function, `forms-new-record-filter' may be
  308.      set to a function.
  309.      Example:
  310.           (defun my-new-record-filter (fields)
  311.             (aset fields 5 (login-name))
  312.             (aset fields 1 (current-time-string))
  313.             ;; and return it
  314.             fields)
  315.           (setq forms-new-record-filter 'my-new-record-filter)
  316. `forms-delete-record'
  317.      deletes the current record. You are prompted for confirmation
  318.      before the record is deleted unless a prefix argument has been
  319.      provided.
  320. `forms-search REGEXP'
  321.      searches for REGEXP in all records following this one. If found,
  322.      this record is shown.
  323.      The next time it is invoked, the previous regexp is the default,
  324.      so you can do repeated searches by simply pressing RET in response
  325.      to the prompt.
  326. `revert-buffer'
  327.      reverts a possibly modified forms to its original state. It only
  328.      affect the record currently in the forms.
  329. `forms-exit'
  330.      terminates forms processing. The data file is saved if it has been
  331.      modified.
  332. `forms-exit-no-save'
  333.      aborts forms processing. If the data file has been modified Emacs
  334.      will ask questions.
  335. `describe-mode'
  336.      gives additional help.
  337. `save-buffer'
  338.      saves the changes in the data file, if modified.
  339.    If the variable `forms-forms-scrolls' is set to a value other than
  340. `nil' (which it is, by default), the Emacs functions `scroll-up' and
  341. `scroll-down' will perform a `forms-next-record' and
  342. `forms-prev-record' when in forms mode.  So you can use your favourite
  343. page commands to page through the data file.
  344.    Likewise, if the variable `forms-forms-jump' is not `nil' (which it
  345. is, by default), Emacs functions `beginning-of-buffer' and
  346. `end-of-buffer' will perform `forms-first-record' and
  347. `forms-last-record' when in forms mode.
  348.    After forms mode is entered, functions contained in
  349. `forms-mode-hooks' are executed to perform user defined customization.
  350. File: forms,  Node: Key Bindings,  Next: Miscellaneous,  Prev: Forms Mode Commands,  Up: Top
  351. Key bindings
  352. ============
  353.    This section describes the key bindings as they are defined when
  354. invoking forms mode.
  355. All commands must be prefixed with `C-c' when editing a forms. If a
  356. forms is read-only, `C-c' is not used.  The only exception to this rule
  357. is `forms-next-field', which is bound to `TAB' in all maps.
  358. `C-c TAB'
  359.      `forms-next-field'
  360. `C-c SPC'
  361.      `forms-next-record'
  362. `C-c <'
  363.      `forms-first-record'
  364. `C-c >'
  365.      `forms-first-record'
  366. `C-c d'
  367.      `forms-delete-record'
  368. `C-c e'
  369.      `forms-edit-mode'
  370. `C-c i'
  371.      `forms-insert-record'
  372. `C-c j'
  373.      `forms-jump-record'
  374. `C-c n'
  375.      `forms-next-record'
  376. `C-c p'
  377.      `forms-prev-record'
  378. `C-c q'
  379.      `forms-exit'
  380. `C-c s REGEXP'
  381.      `forms-search'
  382. `C-c v'
  383.      `forms-view-mode'
  384. `C-c x'
  385.      `forms-exit-no-save'
  386. `C-c ?'
  387.      `describe-mode'
  388. `C-c DEL'
  389.      `forms-prev-record'
  390. File: forms,  Node: Miscellaneous,  Next: Error Messages,  Prev: Key Bindings,  Up: Top
  391. Miscellaneous
  392. =============
  393.    A global variable `forms-version' holds the version information of
  394. the current implementation of forms mode.
  395.    It is very convenient to use symbolic names for the fields in a
  396. record.  The function `forms-enumerate' provides an elegant means to
  397. define a series of variables to consecutive numbers.  The function
  398. returns the higest number used, so it can be used to set
  399. `forms-number-of-fields' also:
  400.      (setq forms-number-of-fields
  401.            (forms-enumerate
  402.             '(field1 field2 field3 ... )))
  403.    `field1' will be set to 1, `field2' to 2 and so on.
  404.    Care has been taken to localize the current information of the forms
  405. mode, so it is possible to visit multiple files in forms mode
  406. simultaneously, even if they have different properties.
  407.    Since buffer-local functions are not available in this version of GNU
  408. Emacs, the definitions of the filter functions
  409. `forms-new-record-filter' and `forms-modified-record-filter' are copied
  410. into internal, buffer local variables when forms-mode is initialized.
  411.    If a control file is visited using the standard `find-file'
  412. commands, forms mode can be enabled with the command `M-x forms-mode'.
  413. Forms mode will be automatically enabled if the file contains the
  414. string `"-*- forms -*-"' somewhere in the first line. However, this
  415. makes it hard to edit the control file itself so you'd better think
  416. twice before using this.
  417.    The default format for the data file, using TAB to separate fields
  418. and `C-k' to separate multi-line fields, matches the file format of
  419. some popular Macintosh database programs, e.g. FileMaker. So
  420. `forms-mode' could decrease the need to use Apple computers.
  421. File: forms,  Node: Error Messages,  Next: Examples,  Prev: Miscellaneous,  Up: Top
  422. Error Messages
  423. ==============
  424.    This section describes all error messages which can be generated by
  425. forms mode.
  426. `'forms-file' has not been set'
  427.      The variable `forms-file' was not set by the control file.
  428. `'forms-number-of-fields' has not been set'
  429.      The variable `forms-number-of-fields' was not set by the control
  430.      file.
  431. `'forms-number-of-fields' must be > 0'
  432.      The variable `forms-number-of-fields' did not contain a positive
  433.      number.
  434. `'forms-field-sep' is not a string'
  435. `'forms-multi-line' must be nil or a one-character string'
  436.      The variable `forms-multi-line' was set to something other than
  437.      `nil or' a single-character string.
  438. `'forms-multi-line' is equal to 'forms-field-sep''
  439.      The variable `forms-multi-line' may not be equal to
  440.      `forms-field-sep' for this would make it impossible to distinguish
  441.      fields and the lines in the fields.
  442. `'forms-format-list' has not been set'
  443. `'forms-format-list' is not a list'
  444.      The variable `forms-format-list' was not set to a lisp `list' by
  445.      the control file.
  446. `Forms error: field number XX out of range 1..NN'
  447.      A field number was supplied with a value of XX, which was not
  448.      greater than zero and smaller than or equal to the number of
  449.      fields in the forms, NN.
  450. `Forms error: not a function FUN'
  451.      The first element of the lisp list specified in `forms-format-list'
  452.      did not have a function value.
  453. `Invalid element in 'forms-format-list': XX'
  454.      A list element was supplied in `forms-format-list' which was not a
  455.      `string', `number' nor a `lisp list'.
  456. `Parse error: not looking at "..."'
  457.      When re-parsing the contents of a forms, the text shown could not
  458.      be found.
  459. `Parse error: cannot find "..."'
  460.      When re-parsing the contents of a forms, the text shown, which
  461.      separates two fields, could not be found.
  462. `Parse error: cannot parse adjacent fields XX and YY'
  463.      Fields XX and YY were not separated by text, so could not be
  464.      parsed again.
  465. `Record has XX fields instead of YY'
  466.      The number of fields in this record in the data file did not match
  467.      `forms-number-of-fields'. Missing fields will be set to empty.
  468. `Multi-line fields in this record - update refused!'
  469.      The current record contains newline characters, hence can not be
  470.      written back to the data file, for it would corrupt it.
  471.      probably a field was set to a multi-line value, while the setting
  472.      of `forms-multi-line' prohibited this.
  473. `Record number XX out of range 1..YY'
  474.      A jump was made to non-existing record XX. YY denotes the number
  475.      of records in the file.
  476. `Stuck at record XX'
  477.      An internal error prevented a specific record from being retrieved.
  478. File: forms,  Node: Examples,  Next: Credits,  Prev: Error Messages,  Up: Top
  479. Examples
  480. ========
  481.    The following example exploits most of the features of forms-mode.
  482. This example is included in the distribution as file `forms-d2.el'.
  483.      ;; demo2 -- demo forms-mode    -*- emacs-lisp -*-
  484.      
  485.      ;; SCCS Status     : demo2    1.1.2
  486.      ;; Author          : Johan Vromans
  487.      ;; Created On      : 1989
  488.      ;; Last Modified By: Johan Vromans
  489.      ;; Last Modified On: Mon Jul  1 13:56:31 1991
  490.      ;; Update Count    : 2
  491.      ;; Status          : OK
  492.      ;;
  493.      ;; This sample forms exploit most of the features of forms mode.
  494.      
  495.      ;; Set the name of the data file.
  496.      (setq forms-file "forms-d2.dat")
  497.      
  498.      ;; Use 'forms-enumerate' to set field names and number thereof.
  499.      (setq forms-number-of-fields
  500.            (forms-enumerate
  501.             '(arch-newsgroup            ; 1
  502.           arch-volume            ; 2
  503.           arch-issue            ; and ...
  504.           arch-article            ; ... so
  505.           arch-shortname            ; ... ... on
  506.           arch-parts
  507.           arch-from
  508.           arch-longname
  509.           arch-keywords
  510.           arch-date
  511.           arch-remarks)))
  512.      
  513.      ;; The following functions are used by this form for layout purposes.
  514.      ;;
  515.      (defun arch-tocol (target &optional fill)
  516.        "Produces a string to skip to column TARGET. Prepends newline if needed.
  517.      The optional FILL should be a character, used to fill to the column."
  518.        (if (null fill)
  519.            (setq fill ? ))
  520.        (if (< target (current-column))
  521.            (concat "\n" (make-string target fill))
  522.          (make-string (- target (current-column)) fill)))
  523.      ;;
  524.      (defun arch-rj (target field &optional fill)
  525.        "Produces a string to skip to column TARGET minus the width of field FIELD.
  526.      Prepends newline if needed. The optional FILL should be a character,
  527.      used to fill to the column."
  528.        (arch-tocol (- target (length (nth field forms-fields))) fill))
  529.      
  530.      ;; Record filters.
  531.      ;; This example uses the (defun ...) method of defining.
  532.      ;;
  533.      (defun forms-new-record-filter (the-record)
  534.        "Form a new record with some defaults."
  535.        (aset the-record arch-from (user-full-name))
  536.        (aset the-record arch-date (current-time-string))
  537.        the-record                ; return it
  538.      )
  539.      
  540.      ;; The format list.
  541.      (setq forms-format-list
  542.           (list
  543.             "====== Public Domain Software Archive ======\n\n"
  544.             arch-shortname
  545.             " - "            arch-longname
  546.             "\n\n"
  547.             "Article: "        arch-newsgroup
  548.             "/"            arch-article
  549.             " "
  550.             '(arch-tocol 40)
  551.             "Issue: "        arch-issue
  552.             " "
  553.             '(arch-rj 73 10)
  554.             "Date: "            arch-date
  555.             "\n\n"
  556.             "Submitted by: "        arch-from
  557.             "\n"
  558.             '(arch-tocol 79 ?-)
  559.             "\n"
  560.             "Keywords: "        arch-keywords
  561.             "\n\n"
  562.             "Parts: "        arch-parts
  563.             "\n\n====== Remarks ======\n\n"
  564.             arch-remarks
  565.           ))
  566.      
  567.      ;; That's all, folks!
  568. File: forms,  Node: Credits,  Next: Concept Index,  Prev: Examples,  Up: Top
  569. Credits
  570. =======
  571.    Forms mode is developed by Johan Vromans `<jv@mh.nl>' at Multihouse
  572. Research in the Netherlands.
  573.    Harald Hanche-Olsen `<hanche@imf.unit.no>' supplied the idea for the
  574. new record filter, and provided better replacements for some internal
  575. functions.
  576.    Bugfixes and other useful suggestions were supplied by
  577. cwitty@portia.stanford.edu, Jonathan I. Kamens, Ignatios Souvatzis and
  578. Harald Hanche-Olsen.
  579.    This documentation was slightly inspired by the documentation of
  580. "rolo mode" by Paul Davis at Schlumberger Cambridge Research
  581. `<davis%scrsu1%sdr.slb.com@relay.cs.net>'.
  582.    None of this would have been possible without GNU Emacs of the Free
  583. Software Foundation. Thanks, Richard!
  584. File: forms,  Node: Concept Index,  Next: Variable Index,  Prev: Credits,  Up: Top
  585. Concept Index
  586. *************
  587. * Menu:
  588. * forms-mode:                           Top.
  589. * pseudo-newline:                       Data File Format.
  590. File: forms,  Node: Variable Index,  Next: Function Index,  Prev: Concept Index,  Up: Top
  591. Variable Index
  592. **************
  593. * Menu:
  594. * forms-field-sep:                      Control File Format.
  595. * forms-fields:                         Forms Format Description.
  596. * forms-file:                           Control File Format.
  597. * forms-format-list:                    Forms Format Description.
  598. * forms-format-list:                    Control File Format.
  599. * forms-forms-jump:                     Control File Format.
  600. * forms-forms-jump:                     Forms Mode Commands.
  601. * forms-forms-scroll:                   Forms Mode Commands.
  602. * forms-forms-scroll:                   Control File Format.
  603. * forms-mode-hooks:                     Forms Mode Commands.
  604. * forms-multi-line:                     Control File Format.
  605. * forms-number-of-fields:               Control File Format.
  606. * forms-read-only:                      Control File Format.
  607. * forms-version:                        Miscellaneous.
  608. File: forms,  Node: Function Index,  Prev: Variable Index,  Up: Top
  609. Function Index
  610. **************
  611. * Menu:
  612. * beginning-of-buffer:                  Forms Mode Commands.
  613. * describe-mode:                        Forms Mode Commands.
  614. * end-of-buffer:                        Forms Mode Commands.
  615. * eval-current-buffer:                  Control File Format.
  616. * forms-delete-record:                  Forms Mode Commands.
  617. * forms-edit-mode:                      Forms Mode Commands.
  618. * forms-enumerate:                      Miscellaneous.
  619. * forms-exit:                           Forms Mode Commands.
  620. * forms-exit-no-save:                   Forms Mode Commands.
  621. * forms-find-file:                      Forms Mode Commands.
  622. * forms-find-file-other-window:         Forms Mode Commands.
  623. * forms-first-record:                   Forms Mode Commands.
  624. * forms-insert-record:                  Forms Mode Commands.
  625. * forms-jump-record:                    Forms Mode Commands.
  626. * forms-last-record:                    Forms Mode Commands.
  627. * forms-modified-record-filter:         Modifying Forms Contents.
  628. * forms-modified-record-filter:         Control File Format.
  629. * forms-new-record-filter:              Control File Format.
  630. * forms-next-field:                     Forms Mode Commands.
  631. * forms-next-record:                    Forms Mode Commands.
  632. * forms-prev-record:                    Forms Mode Commands.
  633. * forms-search:                         Forms Mode Commands.
  634. * forms-view-mode:                      Forms Mode Commands.
  635. * revert-buffer:                        Forms Mode Commands.
  636. * save-buffer:                          Forms Mode Commands.
  637. * scroll-down:                          Forms Mode Commands.
  638. * scroll-up:                            Forms Mode Commands.
  639. Tag Table:
  640. Node: Top
  641. Node: What is in a Forms
  642. Node: Data File Format
  643. Node: Control File Format
  644. Node: Forms Format Description
  645. Node: Modifying Forms Contents
  646. Node: Forms Mode Commands
  647. 10941
  648. Node: Key Bindings
  649. 16738
  650. Node: Miscellaneous
  651. 17694
  652. Node: Error Messages
  653. 19457
  654. Node: Examples
  655. 22244
  656. Node: Credits
  657. 25306
  658. Node: Concept Index
  659. 26092
  660. Node: Variable Index
  661. 26320
  662. Node: Function Index
  663. 27312
  664. End Tag Table
  665.